package br.com.dufs.mvc.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import br.com.dufs.mvc.model.ComposicaoFamiliar;
import br.com.dufs.mvc.model.Entrevistado;
import br.com.dufs.mvc.service.ComposicaoFamiliarBOService;
import br.com.dufs.mvc.service.EntrevistadoBOService;

@Controller
@Scope("view")
public class EntrevistadoMB implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private boolean entrevistaNable = false;
	private boolean entrevistaDisble = true;
	private boolean cpfDisble = false;

	private ComposicaoFamiliar composicaoFamiliar;

	@Autowired
	EntrevistadoBOService entrevistadoBOService;
	@Autowired
	ComposicaoFamiliarBOService cBoService;

	private Entrevistado entrevistado = new Entrevistado();

	private DataModel<ComposicaoFamiliar> listaCompFam;

	private List<ComposicaoFamiliar> compFamList = new ArrayList<ComposicaoFamiliar>();

	@PostConstruct
	public void filmeSelecionado() {
		String id = (String) FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap().get("id");

		if (id != null) {
			this.entrevistado = entrevistadoBOService.pesquisarPorId(id);
			preparaEntrevista();
			compFamList = (List<ComposicaoFamiliar>) this.entrevistado.getListaCompFam();
		}
	}

	public Entrevistado getEntrevistado() {
		return entrevistado;
	}

	public void setEntrevistado(Entrevistado entrevistado) {
		this.entrevistado = entrevistado;
	}

	public void prepararAdicionar(ActionEvent actionEvent) {
		this.entrevistado = new Entrevistado();
	}

	// public void prepararAlterar(ActionEvent actionEvent) {
	// this.entrevistado = (Entrevistado) (this.listaEntrevistados
	// .getRowData());
	// }
	//
	// public String prepAlterar() {
	// this.entrevistado = (Entrevistado) (this.listaEntrevistados
	// .getRowData());
	// getEntrevistadoSessao();
	// if (entrevistado.getListaCompFam().size() > 0)
	// this.compFamList = (List<ComposicaoFamiliar>) entrevistado
	// .getListaCompFam();
	// else
	// this.compFamList = new ArrayList<ComposicaoFamiliar>();
	//
	// preparaEntrevista();
	//
	// setEntrevistaNable(false);
	// setEntrevistaDisble(false);
	// setCpfDisble(true);
	// return "entrevista";
	// }

	public boolean isCpfDisble() {
		return cpfDisble;
	}

	public void setCpfDisble(boolean cpfDisble) {
		this.cpfDisble = cpfDisble;
	}

	public boolean isEntrevistaNable() {
		return entrevistaNable;
	}

	public void setEntrevistaNable(boolean entrevistaNable) {
		this.entrevistaNable = entrevistaNable;
	}

	public boolean isEntrevistaDisble() {
		return entrevistaDisble;
	}

	public void setEntrevistaDisble(boolean entrevistaDisble) {
		this.entrevistaDisble = entrevistaDisble;
	}

	// public String excluir() {
	//
	// Entrevistado entrevistadoTemp = (Entrevistado) (this.listaEntrevistados
	// .getRowData());
	// entrevistadoBOService.excluir(entrevistadoTemp);
	// return "entrevista";
	//
	// }

	public void preparaEntrevista() {
		composicaoFamiliar = new ComposicaoFamiliar();
		setEntrevistaNable(false);
		setEntrevistaDisble(false);
		setCpfDisble(true);

	}

	public void adicionar() {
		if (compFamList.size() > 0) {
			entrevistado.setListaCompFam(compFamList);
		}
		if (entrevistadoBOService.pesquisarPorId(entrevistado.getCpf()) == null)
			entrevistadoBOService.salvar(entrevistado);
		else
			entrevistadoBOService.atualizar(entrevistado);

	}

	public DataModel<ComposicaoFamiliar> getListaCompFam() {
		listaCompFam = new ListDataModel<ComposicaoFamiliar>(compFamList);
		return listaCompFam;
	}

	public void excluirCompFamilia() {

		ComposicaoFamiliar compFamTemp = (ComposicaoFamiliar) (this.listaCompFam
				.getRowData());
		compFamList.remove(compFamTemp);
		if (cBoService.pesquisarPorId(compFamTemp.getCpfParente()) != null) {
			cBoService.excluir(compFamTemp);

		}

	}

	public void setListaFamilia() {
		composicaoFamiliar.setEntrevistado(entrevistado);
		this.compFamList.add(composicaoFamiliar);
		composicaoFamiliar = new ComposicaoFamiliar();
	}

	public ComposicaoFamiliar getComposicaoFamiliar() {
		return composicaoFamiliar;
	}

	public void setComposicaoFamiliar(ComposicaoFamiliar composicaoFamiliar) {
		this.composicaoFamiliar = composicaoFamiliar;
	}

	public String resetar() {
		entrevistaDisble = true;
		entrevistaNable = false;
		entrevistado = new Entrevistado();
		compFamList = new ArrayList<ComposicaoFamiliar>();

		return "entrevista";
	}

	public void addComFam() {
		this.composicaoFamiliar.setEntrevistado(entrevistado);
		cBoService.salvar(composicaoFamiliar);
		this.entrevistado = entrevistadoBOService.pesquisarPorId(entrevistado
				.getCpf());
		compFamList = (List<ComposicaoFamiliar>) this.entrevistado.getListaCompFam();
	}
}
